scrolledwindow: Ignore 0/0 scroll events when possibly cancelling animation
authorCarlos Garnacho <carlosg@gnome.org>
Tue, 31 Mar 2015 18:24:07 +0000 (20:24 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Wed, 1 Apr 2015 14:24:36 +0000 (16:24 +0200)
These should be used eventually to start kinetic scrolling, so should definitely
be ignored on cancellation.

https://bugzilla.gnome.org/show_bug.cgi?id=747133

gtk/gtkscrolledwindow.c

index 73aa5b0c334727237b5348c66e0f070c4194d15a..2845629a212b6f2b66fda8afe0402da3ebd9033f 100644 (file)
@@ -1074,7 +1074,18 @@ captured_event_cb (GtkWidget *widget,
 
   if (event->type == GDK_SCROLL)
     {
-      gtk_scrolled_window_cancel_deceleration (sw);
+      gdouble dx, dy;
+
+      /* The libinput driver may generate a final event with dx=dy=0
+       * after scrolling finished, this is usually an indication that
+       * the deceleration animation just started, so we definitely
+       * shouldn't cancel it.
+       */
+      if (event->scroll.direction != GDK_SCROLL_SMOOTH ||
+          (gdk_event_get_scroll_deltas (event, &dx, &dy) &&
+           ((int) dx != 0 || (int) dy != 0)))
+        gtk_scrolled_window_cancel_deceleration (sw);
+
       return GDK_EVENT_PROPAGATE;
     }